package com.soft.util.encrypt;


import lombok.extern.slf4j.Slf4j;

import java.io.UnsupportedEncodingException;
import java.security.SignatureException;


/**
 * 和淘宝的一样,复制支付宝MD5.java签名类(版本：3.3)
 *
 * @author meiguiyang
 *
 */
@Slf4j
public class Md5 {

	/**
	 * 签名字符串
	 *
	 * @param text
	 *            需要签名的字符串
	 * @param key
	 *            密钥
	 * @param inputCharset
	 *            编码格式
	 * @return 签名结果
	 */
	public static String sign(String text, String key, String inputCharset) {
		if(inputCharset==null||"".equals(inputCharset)){
			inputCharset="UTF-8";
		}
		try{
			String mysign = DigestUtils.md5DigestAsHex(getContentBytes(text+key, inputCharset));
			log.info("数据：{} \n 签名为：{}",text+key,mysign);
			return mysign;
		}catch (Exception ex){
			ex.printStackTrace();
		}
		return null;
	}

	/**
	 * 签名字符串
	 *
	 * @param text
	 *            需要签名的字符串
	 * @param sign
	 *            签名结果
	 * @param
	 *
	 * @param inputCharset
	 *            编码格式
	 * @return 签名结果
	 */
	public static boolean verify(String text, String sign, String secretKey, String inputCharset) {
		if(inputCharset==null||"".equals(inputCharset)){
			inputCharset="UTF-8";
		}
		String mysign = DigestUtils.md5DigestAsHex(getContentBytes(text+secretKey, inputCharset));
		if (mysign.equals(sign)) {
			return true;
		} else {
			return false;
		}
	}



	/**
	 * @param content
	 * @param charset
	 * @return
	 * @throws SignatureException
	 * @throws UnsupportedEncodingException
	 */
	private static byte[] getContentBytes(String content, String charset) {
		if (charset == null || "".equals(charset)) {
			return content.getBytes();
		}
		try {
			return content.getBytes(charset);
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException("MD5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset);
		}
	}

}
